'use strict';

const crypto = require('crypto');

module.exports = {
  // 密码加密
  aesEncrypt(data, key) {
    const cipher = crypto.Cipher('aes192', key);
    let encrypted = cipher.update(data, 'utf8', 'hex');
    encrypted += cipher.final('hex');
    return encrypted;
  },
  // 密码解密
  aesDecrypt(encrypted, key) {
    const decipher = crypto.Decipher('aes192', key);
    let decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
  },
  // 生成token
  generateToken(data, time = -1) {
    const created = Math.floor(Date.now() / 1000);
    // let cert = fs.readFileSync(path.join(__dirname, '../public/rsa_private_key.pem'));//私钥
    const token = this.app.jwt.sign({
      data,
      exp: time === -1 ? time : created + time,
    }, this.app.config.jwt.secret);
    return token;
  },
  // 解析token
  analysisToken(token) {
    return this.app.jwt.verify(token, this.app.jwt.secret);
  },
};


module.exports.body = {
  SUCCESS({ ctx, res, msg }) {
    ctx.body = {
      code: 0,
      data: res,
      msg,
    };
    ctx.status = 200;
  },

  LOGIN_SUCCESS({ ctx, res, msg, token }) {
    ctx.body = {
      code: 0,
      data: res,
      msg,
      token,
    };
    ctx.status = 200;
  },


  // [POST/PUT/PATCH]：用户新建或修改数据成功。
  CREATED_UPDATE({ ctx, res = null, msg = '新建或修改数据成功' }) {
    ctx.body = {
      code: 0,
      data: res,
      msg,
    };
    ctx.status = 200;
  },

  /*
     * @description [DELETE]：用户删除数据成功。
     */
  NO_CONTENT({ ctx, res = null, msg = '删除数据成功' }) {
    ctx.body = {
      code: 0,
      data: res,
      msg,
    };
    ctx.status = 200;
  },

  // [POST/PUT/PATCH]：用户发出的请求有错误，服务器没有进行新建或修改数据的操作
  INVALID_REQUEST({ ctx, res = null, msg = '请求有错误，服务器没有进行新建、修改、删除数据的操作', code = 400, status = 200 }) {
    ctx.body = {
      code,
      data: res,
      msg,
    };
    ctx.status = status;
  },

  // [*]：表示用户没有认证（令牌、用户名、密码错误）。
  UNAUTHORIZED({ ctx, res = null, msg = '没有认证（令牌、用户名、密码错误）', status = 200 }) {
    ctx.body = {
      code: 401,
      data: res,
      msg,
    };
    ctx.status = status;
  },

  // [*] 表示用户得到授权（与401错误相对），但是访问是被禁止的。
  FORBIDDEN({ ctx, res = null, msg = '权限不足，访问被禁止' }) {
    ctx.body = {
      code: 403,
      data: res,
      msg,
    };
    ctx.status = 200;
  },

  // [*]：用户发出的请求针对的是不存在的记录，服务器没有进行操作
  NOT_FOUND({ ctx, res = null, msg = '资源未找到', status = 200 }) {
    ctx.body = {
      code: 404,
      data: res,
      msg,
    };
    ctx.status = status;
  },

  // [*] 参数发生验证错误。
  VALIDATION_FAILED({ ctx, res = null, msg = '参数发生验证错误' }) {
    ctx.body = {
      code: 422,
      data: res,
      msg,
    };
    ctx.status = 200;
  },

  // 异常错误
  ERROR({ ctx, msg = '系统异常' }) {
    ctx.body = {
      code: 204,
      data: null,
      msg,
    };
    ctx.status = 200;
  },
};
